using System;
using System.Collections.Generic;
using System.Text;

namespace Acms.AcmsControls
{
    [Serializable]
    public class HtmlContentControlProperties : BaseContentControlProperties, System.Xml.Serialization.IXmlSerializable 
    {
        private System.Xml.XmlElement html;

        public string GetHtml()
        {
            string tmp = null;
            if (html != null && html.HasChildNodes && html.FirstChild.Name == "content")
            {
                tmp =html.FirstChild.InnerXml;
            }
            else if(html != null)
            {
                tmp = html.InnerXml;
            }
            if(tmp != null)
            {
                for(int i = 0; i < xmlCodes.Length; i++)
                {
                    tmp = tmp.Replace(xmlCodes[i], htmlCodes[i]);
                }
            }
            return tmp;
        }

        public void SetHtml(string html)
        {
            string tmp = html;
            for (int i = 0; i < xmlCodes.Length; i++)
            {
                tmp = tmp.Replace(htmlCodes[i], xmlCodes[i]);
            }
            System.Xml.XmlDocument tmpXml = new System.Xml.XmlDocument();
            this.html = tmpXml.CreateElement("content");
            this.html.InnerXml = tmp;
        }

        
        string[] htmlCodes = new string[] { "&quot;", "&amp;", "&amp;", "&lt;", "&gt;", "&nbsp;", "&iexcl;", "&cent;", "&pound;", "&curren;", "&yen;", "&brvbar;", "&sect;", "&uml;", "&copy;", "&ordf;", "&laquo;", "&not;", "&shy;", "&reg;", "&macr;", "&deg;", "&plusmn;", "&sup2;", "&sup3;", "&acute;", "&micro;", "&para;", "&middot;", "&cedil;", "&sup1;", "&ordm;", "&raquo;", "&frac14;", "&frac12;", "&frac34;", "&iquest;", "&Agrave;", "&Aacute;", "&Acirc;", "&Atilde;", "&Auml;", "&Aring;", "&AElig;", "&Ccedil;", "&Egrave;", "&Eacute;", "&Ecirc;", "&Euml;", "&Igrave;", "&Iacute;", "&Icirc;", "&Iuml;", "&ETH;", "&Ntilde;", "&Ograve;", "&Oacute;", "&Ocirc;", "&Otilde;", "&Ouml;", "&times;", "&Oslash;", "&Ugrave;", "&Uacute;", "&Ucirc;", "&Uuml;", "&Yacute;", "&THORN;", "&szlig;", "&agrave;", "&aacute;", "&acirc;", "&atilde;", "&auml;", "&aring;", "&aelig;", "&ccedil;", "&egrave;", "&eacute;", "&ecirc;", "&euml;", "&igrave;", "&iacute;", "&icirc;", "&iuml;", "&eth;", "&ntilde;", "&ograve;", "&oacute;", "&ocirc;", "&otilde;", "&ouml;", "&divide;", "&oslash;", "&ugrave;", "&uacute;", "&ucirc;", "&uuml;", "&yacute;", "&thorn;", "&yuml;" };
        string[] xmlCodes = new string[] { "&#34;", "&#38;", "&#38;", "&#60;", "&#62;", "&#160;", "&#161;", "&#162;", "&#163;", "&#164;", "&#165;", "&#166;", "&#167;", "&#168;", "&#169;", "&#170;", "&#171;", "&#172;", "&#173;", "&#174;", "&#175;", "&#176;", "&#177;", "&#178;", "&#179;", "&#180;", "&#181;", "&#182;", "&#183;", "&#184;", "&#185;", "&#186;", "&#187;", "&#188;", "&#189;", "&#190;", "&#191;", "&#192;", "&#193;", "&#194;", "&#195;", "&#196;", "&#197;", "&#198;", "&#199;", "&#200;", "&#201;", "&#202;", "&#203;", "&#204;", "&#205;", "&#206;", "&#207;", "&#208;", "&#209;", "&#210;", "&#211;", "&#212;", "&#213;", "&#214;", "&#215;", "&#216;", "&#217;", "&#218;", "&#219;", "&#220;", "&#221;", "&#222;", "&#223;", "&#224;", "&#225;", "&#226;", "&#227;", "&#228;", "&#229;", "&#230;", "&#231;", "&#232;", "&#233;", "&#234;", "&#235;", "&#236;", "&#237;", "&#238;", "&#239;", "&#240;", "&#241;", "&#242;", "&#243;", "&#244;", "&#245;", "&#246;", "&#247;", "&#248;", "&#249;", "&#250;", "&#251;", "&#252;", "&#253;", "&#254;", "&#255;" };
        #region IXmlSerializable Members

        public System.Xml.Schema.XmlSchema GetSchema()
        {
            return null;
        }

        public void ReadXml(System.Xml.XmlReader reader)
        {
            while (reader.Read())
            {
                if (reader.Name.ToLower() == "html" && reader.NodeType == System.Xml.XmlNodeType.Element)
                {
                    string tmp = reader.ReadInnerXml();
                    System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
                    if (tmp.StartsWith("<content>"))
                    {
                        doc.LoadXml(tmp);
                    }
                    else
                    {
                        doc.LoadXml("<content/>");
                        doc.DocumentElement.InnerXml = tmp;
                    }
                    html = doc.DocumentElement;
                }
            }
        }

        public void WriteXml(System.Xml.XmlWriter writer)
        {
            writer.WriteStartElement("html");
            writer.WriteAttributeString("search", "true");
            if (this.html != null)
            {
                this.html.WriteTo(writer);
            }
            writer.WriteEndElement();
        }

        #endregion
    }
}
